/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controladores;

import DAOS.DAOChofer;
import DAOS.DAOCooperativa;
import DAOS.DAOFeriados;
import DAOS.DAOMultas;
import DAOS.DAOSocios;
import DAOS.DAOVehiculo;
import Modelos.Chofer;
import Modelos.Fecha;
import Modelos.Multa;
import Modelos.Socio;
import Modelos.Vehiculo;
import Vistas.VMulta;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;


public class ControladorMulta implements ActionListener
{
    private VMulta vmulta;
    private Multa multa;
    DAOMultas multasDAO = new DAOMultas();
    
    DAOVehiculo vehiculosDAO = new DAOVehiculo();
    DAOChofer choferDAO = new DAOChofer();
    DAOSocios sociosDAO = new DAOSocios();
    DAOCooperativa cooperativaDAO = new DAOCooperativa();
    DAOFeriados feriadosDAO = new DAOFeriados();
    
    Socio sc = new Socio();
    Chofer cf = new Chofer();
    Vehiculo ve = new Vehiculo();
    Fecha fe = new Fecha();

    public ControladorMulta()
    {
        vmulta = new VMulta();
        vmulta.agregarListener(this);
        vmulta.setLocationRelativeTo(null);
        vmulta.setVisible(true);
      
        cargarTablaMultas();
        ordenarFechasFeriadas();
        cargarComboBoxFecha();
    }
    
    

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if (e.getSource().equals(vmulta.getBtnGenerar()))
        {
            if (vmulta.getCmbFecha().getSelectedItem().toString() == "Seleccione...")
            {
                vmulta.mostrarMensaje("Seleccione un dia feriado");
                vmulta.getCmbFecha().requestFocus();
                return;
            }
            else
            {
                generarMulta();
            }
        }
    }
    
    private void generarMulta()
    {
                
        String codCoop = null;
        String linea = null;
      
        
        String propietario = null;
        String chofer = null;
        
        vehiculosDAO.cargarVehiculos();
        choferDAO.cargarChofer();
        cooperativaDAO.cargarCooperativa();
        
        int indicePlaca = (int)Math.floor(Math.random()*vehiculosDAO.getVehiculoLista().size());
        int indiceChofer = (int)Math.floor(Math.random()*choferDAO.getChoferes().size());
        //int indiceFeriado = (int)Math.floor(Math.random()*listas.getListaFeriados().size());
        
       
        
        String placa = vehiculosDAO.getVehiculoLista().get(indicePlaca).getPlaca();
        String codChofer = choferDAO.getChoferes().get(indiceChofer).getCedula();
        String codPropietario = vehiculosDAO.getVehiculoLista().get(indicePlaca).getCodSocio();
        //String feriado = listas.getListaFeriados().get(indiceFeriado).getDia();
       
       
        
        
        
       sc = sociosDAO.buscarSocio(codPropietario);
       if (sc.getCedula().trim().length() >=0)
       {
        codCoop = sc.getCodCoperativa();
        for (int i=0;i<cooperativaDAO.getCooper().size();i++)
        {
            if(codCoop.equals(cooperativaDAO.getCooper().get(i).getRif()))
            {
                linea = cooperativaDAO.getCooper().get(i).getNombre();
            }
        }
        
                propietario = sc.getNombre();
  
        }
       
       cf = choferDAO.buscarChofer(codChofer);
       
       if (cf.getCedula().trim().length() >= 0)
       {
           chofer = cf.getNombre();
       }
       
      
       Multa mta = new Multa();
      
      mta = multasDAO.buscarMultaPlacaFeriado(placa,deStringToDate(fechaGuardar()));
       
       if (placa.equals(mta.getPlaca()))
       {
           vmulta.mostrarMensaje("No se puede multar dos veces un vehiculo el mismo dia");
           return;
       }
       else
       {
      
      
        multa = new Multa(placa,codChofer,codPropietario,codCoop,deStringToDate(fechaGuardar()));
        multasDAO.registrarMulta(multa);
        cargarTablaMultas();
  
        }
        
    }
    
    private void cargarTablaMultas()
    {
        
              
    int Fila;
    Multa multa = new Multa();
    multasDAO.cargarMultas();

    for (Fila=0;Fila<multasDAO.getMultaLista().size();Fila++)
    {
       multa=multasDAO.getMultaLista().get(Fila);

       vmulta.getTabMultas().setValueAt(multa.getPlaca(), Fila, 0);
       vmulta.getTabMultas().setValueAt(multa.getCodChofer(),Fila, 1);
       vmulta.getTabMultas().setValueAt(multa.getPropietario(),Fila, 2);
       vmulta.getTabMultas().setValueAt(multa.getCodLinea(),Fila, 3);
       vmulta.getTabMultas().setValueAt(multa.getDiaFeriado(),Fila, 4);

    } 
    }
    
       public void cargarComboBoxFecha()
   {
       
       vmulta.getCmbFecha().addItem("Seleccione...");
       
       int fila;
       
       
       for (fila = 0; fila<feriadosDAO.getFechas().size();fila++)
       {
           Date desc = feriadosDAO.getFechas().get(fila).getDia();
           vmulta.getCmbFecha().addItem(desc);
       }
   }
       
     
        private void ordenarFechasFeriadas()
   {
        Fecha fi = new Fecha();
        Fecha fj = new Fecha();
        Date fechai;
        Date fechaj;
        feriadosDAO.cargarFeriados();
        for (int i = 0; i < feriadosDAO.getFechas().size() - 1; i++) 
        {
            for (int j = i + 1; j < feriadosDAO.getFechas().size(); j++) 
            {
                fechai = feriadosDAO.getFechas().get(i).getDia();
                fechaj = feriadosDAO.getFechas().get(j).getDia();

                if (fechai.compareTo(fechaj) > 0) 
                {
                   
                    fi = new Fecha(fechai);
                    fj = new Fecha(fechaj);
                    feriadosDAO.getFechas().set(i,fj);
                    feriadosDAO.getFechas().set(j, fi);
                }
            }
        }
   }
     
   public static synchronized Date deStringToDate(String fecha){
           Date fechaEnviar = null;
           
       try{
          
           SimpleDateFormat formatoDelTexto = new SimpleDateFormat("dd-MM-yyyy");
           fechaEnviar = formatoDelTexto.parse(fecha);
           return fechaEnviar;
       }catch(ParseException ex){
           ex.printStackTrace();
       }
       return fechaEnviar;
   }
   public String fechaGuardar(){
        SimpleDateFormat formateador = new SimpleDateFormat("dd-MM-yyyy");
         String fecha = formateador.format(vmulta.getCmbFecha().getSelectedItem());
       return fecha;
    }
}
